package test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

public class VolatileExample1 {
    // 定义一个共享变量 sharedCounter，类型为 volatile long
    // 使用 volatile 关键字保证对该变量的操作具有原子性和可见性
    private static volatile long sharedCounter = 0L;


    // 定义线程数
    private static final int THREAD_COUNT = 4;

    public static void main(String[] args) throws InterruptedException {
        // 创建一个线程池，大小为 THREAD_COUNT
        ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT);
        // 启动多个线程进行操作
        for (int i = 0; i < THREAD_COUNT; i++) {
            // 使用 submit 方法提交任务到线程池中
                // 对共享资源进行操作
            int finalI = i;
            executorService.submit(() -> {
                    for (int j = 0; j < 100000000; j++) {
                        // 对共享变量进行写操作
                        sharedCounter++;
                    }
                    System.out.println("线程"+ finalI +"的输出结果"+sharedCounter);
            });
            System.out.println(sharedCounter);
        }
        // 关闭线程池，并等待所有任务执行完成
        executorService.shutdown();
        executorService.awaitTermination(1, TimeUnit.MINUTES);

        // 输出共享变量的值
        System.out.println("sharedCounter = " + sharedCounter);
    }
}
